﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using AutoBackupDatabase.BLL;
using AutoBackupDatabase.General;
using AutoBackupDatabase.ENT;
using AutoBackupDatabase.Form;

namespace AutoBackupDatabase
{
    public partial class UserAccount_ucc : DevExpress.XtraEditors.XtraUserControl
    {
        private USERACCOUNTBLL userBLL;
        List<USERACCOUNTENT> listUser;
        EMPLOYERBLL empBLL;
        GROUPUSERBLL groupUserBLL;

        public UserAccount_ucc()
        {
            InitializeComponent();
            userBLL = new USERACCOUNTBLL();
            listUser = new List<USERACCOUNTENT>();
            empBLL = new EMPLOYERBLL();
            groupUserBLL = new GROUPUSERBLL();
        }


        private void btnAdd_Click(object sender, EventArgs e)
        {


            if (btnAdd.Text == "THÊM MỚI")
            {
                general.ChangeButtonStatus("insert", btnAdd, btnUpdate, btnDelete);
                txtCMND.Text = "";
                txtEmail.Text = "";
                txtFirstName.Text = "";
                txtHomePhone.Text="";
                txtLastName.Text = "";
                txtMiddleName.Text = "";
                txtMobile.Text = "";
                txtPassWord.Text = "";
                txtUserName.Text = "";
                txtUserName.Enabled = true;
                txtPassWord.Enabled = true;
                txtpasswordconfirm.Enabled = true;
                return;
            }
            else if (btnAdd.Text == "LƯU")
            {
                if (!Validator.IsNull(txtCMND.Text))
                {
                    MessageBox.Show("CMND không được bỏ trống vui lòng kiểm tra lại", "Thông báo");
                    return;
                }
               
                if (!Validator.IsNull(txtFirstName.Text))
                {
                    MessageBox.Show("Tên không được bỏ trống vui lòng kiểm tra lại", "Thông báo");
                    return;
                }
                if (!Validator.IsNull(txtLastName.Text))
                {
                    MessageBox.Show("Họ không được bỏ trống vui lòng kiểm tra lại", "Thông báo");
                    return;
                }

                if (!Validator.IsNull(txtPassWord.Text))
                {
                    MessageBox.Show("Mật khẩu không được bỏ trống vui lòng kiểm tra lại", "Thông báo");
                    return;
                }
                if (txtPassWord.Text.Trim() != txtpasswordconfirm.Text.Trim())
                {
                    MessageBox.Show(" Mật khẩu không trùng khớp vui lòng kiểm tra lại", "Thông báo");
                    return;
                }
                if (!Validator.IsNull(txtUserName.Text))
                {
                    MessageBox.Show("Tên đăng nhập không được bỏ trống vui lòng kiểm tra lại", "Thông báo");
                    return;
                } 
                if (glkEmpoyer.EditValue == null || glkEmpoyer.EditValue.ToString() == "")
                {
                    MessageBox.Show("Chưa chọn nhân viên vui lòng kiểm tra lại", "Thông báo");
                    return;
                }

                if (glkGroupUser.EditValue == null || glkGroupUser.EditValue.ToString() == "")
                {
                    MessageBox.Show("Chưa chọn nhóm người dùng vui lòng kiểm tra lại", "Thông báo");
                    return;
                }

                if (listUser.Exists(p => p.USERNAME.Equals(Validator.TrimAll(txtUserName.Text))))
                {
                    MessageBox.Show("Tên đăng nhập này [" + txtUserName.Text + "] đã tồn tại vui lòng nhập tên khác", "Thông báo");
                    return;
                }






                USERACCOUNTENT ent = new USERACCOUNTENT();
                ent.DOB = dtpDOB.DateTime;
                ent.EMAIL = txtEmail.Text;
                ent.EMPLOYERID = glkEmpoyer.EditValue.ToString();
                ent.FIRSTNAME = txtFirstName.Text;
                ent.FULLNAME = txtLastName.Text + " " + txtMiddleName.Text + " " + txtFirstName.Text;
                ent.GROUPUSERCODE = glkGroupUser.EditValue.ToString();
                ent.HOMEPHONE = txtHomePhone.Text;
                ent.IDCARD = txtCMND.Text;
                
                if (chkIsAdmin.CheckState == CheckState.Checked)
                {
                    ent.ISADMIN = 1;
                }
                else
                    ent.ISADMIN = 0;
                ent.LASTNAME = txtLastName.Text;
                ent.MIDDLENAME = txtMiddleName.Text;
                ent.MOBILEPHONE = txtMobile.Text;
                ent.PASSWORD= Encrypt.MD5Encrypt(txtPassWord.Text);
                ent.USERNAME = txtUserName.Text;

                if (userBLL.INSERTUSERACCOUNT(ent))
                {
                    txtCMND.Text = "";
                    txtEmail.Text = "";
                    txtFirstName.Text = "";
                    txtHomePhone.Text = "";
                    txtLastName.Text = "";
                    txtMiddleName.Text = "";
                    txtMobile.Text = "";
                    txtPassWord.Text = "";
                    txtUserName.Text = "";
                    txtUserName.Enabled = false;
                    txtPassWord.Enabled = false;
                    txtpasswordconfirm.Enabled = false;
                    general.ChangeButtonStatus("insert", btnAdd, btnUpdate, btnDelete);

                    MessageBox.Show("Thêm mới thành công", "Thông báo");

                    LoadDataUser();
                }
                else
                {
                    MessageBox.Show("Thêm mới thất bại vui lòng kiểm tra lại dữ liệu ", "Thông báo");
                }
            }
            else
                MessageBox.Show("Thêm mới thất bại vui lòng kiểm tra lại dữ liệu ", "Thông báo");
        }

        private void LoadDataUser()
        {
            gridControl1.DataSource = userBLL.GET_USERACCOUNT_ALL();
            
        }

        private void btnUpdate_Click(object sender, EventArgs e)
        {
            try
            {
                if (btnUpdate.Text == "CẬP NHẬT")
                {
                    general.ChangeButtonStatus("update", btnAdd, btnUpdate, btnDelete);
                    txtUserName.Enabled = false;
                    txtpasswordconfirm.Enabled = false;
                    txtPassWord.Enabled = false;
                    return;

                }
                else
                    if (btnUpdate.Text == "HỦY")
                    {
                        general.ChangeButtonStatus("update", btnAdd, btnUpdate, btnDelete);
                        txtUserName.Enabled = false;
                    }
                    else if (btnUpdate.Text == "LƯU")
                    {
                        if (!Validator.IsNull(txtCMND.Text))
                        {
                            MessageBox.Show("CMND không được bỏ trống vui lòng kiểm tra lại", "Thông báo");
                            return;
                        }

                        if (!Validator.IsNull(txtFirstName.Text))
                        {
                            MessageBox.Show("Tên không được bỏ trống vui lòng kiểm tra lại", "Thông báo");
                            return;
                        }
                        if (!Validator.IsNull(txtLastName.Text))
                        {
                            MessageBox.Show("Họ không được bỏ trống vui lòng kiểm tra lại", "Thông báo");
                            return;
                        }


                        if (!Validator.IsNull(txtUserName.Text))
                        {
                            MessageBox.Show("Tên đăng nhập không được bỏ trống vui lòng kiểm tra lại", "Thông báo");
                            return;
                        }
                        if (glkEmpoyer.EditValue == null || glkEmpoyer.EditValue.ToString() == "")
                        {
                            MessageBox.Show("Chưa chọn nhân viên vui lòng kiểm tra lại", "Thông báo");
                            return;
                        }

                        if (glkGroupUser.EditValue == null || glkGroupUser.EditValue.ToString() == "")
                        {
                            MessageBox.Show("Chưa chọn nhóm người dùng vui lòng kiểm tra lại", "Thông báo");
                            return;
                        }

                        if (listUser.Exists(p => p.USERNAME.Equals(Validator.TrimAll(txtUserName.Text))))
                        {
                            MessageBox.Show("Tên đăng nhập này [" + txtUserName.Text + "] đã tồn tại vui lòng nhập tên khác", "Thông báo");
                            return;
                        }



                        USERACCOUNTENT ent = new USERACCOUNTENT();
                        ent.DOB = dtpDOB.DateTime;
                        ent.EMAIL = txtEmail.Text;
                        ent.EMPLOYERID = glkEmpoyer.EditValue.ToString();
                        ent.FIRSTNAME = txtFirstName.Text;
                        ent.FULLNAME = txtLastName.Text + " " + txtMiddleName.Text + " " + txtFirstName.Text;
                        ent.GROUPUSERCODE = glkGroupUser.EditValue.ToString();
                        ent.HOMEPHONE = txtHomePhone.Text;
                        ent.IDCARD = txtCMND.Text;

                        if (chkIsAdmin.CheckState == CheckState.Checked)
                        {
                            ent.ISADMIN = 1;
                        }
                        else
                            ent.ISADMIN = 0;
                        ent.LASTNAME = txtLastName.Text;
                        ent.MIDDLENAME = txtMiddleName.Text;
                        ent.MOBILEPHONE = txtMobile.Text;
                        ent.PASSWORD = txtPassWord.Text;
                        ent.USERNAME = txtUserName.Text.ToLower();


                        if (userBLL.UPDATEUSERACOUNTBYID(ent))
                        {
                            MessageBox.Show("Cập nhật thành công", "Thông báo");
                            txtUserName.Enabled = true;
                            txtpasswordconfirm.Enabled = true;
                            txtPassWord.Enabled = true;

                            LoadDataUser();
                            general.ChangeButtonStatus("update", btnAdd, btnUpdate, btnDelete);

                        }
                    }
                    else
                        MessageBox.Show("Cập nhật thất bại vui lòng kiểm tra lại dữ liệu ", "Thông báo");
            }
            catch (Exception)
            {

                return;
            }
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            try
            {
                if (btnDelete.Text == "HỦY")
                {
                    general.ChangeButtonStatus("update", btnAdd, btnUpdate, btnDelete);
                    txtUserName.Enabled = true;
                    txtpasswordconfirm.Enabled = true;
                    txtPassWord.Enabled = true;
                }
                else if (btnDelete.Text == "XÓA" && Validator.IsNull(txtUserName.Text))
                {
                    if (MessageBox.Show(MessageShow.delConfirmInfo, MessageShow.delConfirmCaption, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                    {
                        USERACCOUNTENT ent = new USERACCOUNTENT();
                        ent.USERNAME = txtUserName.Text;
                            userBLL.DELTELEBYUSERACCOUNTBYUSERACCOUNT(ent);
                            LoadDataUser();
                        general.ChangeButtonStatus("delete", btnAdd, btnUpdate, btnDelete);
                    }
                }
                else
                    return;
            }
            catch (Exception)
            {

                return;
            }
        }

      

        private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
        {
            try
            {
                if (e.RowHandle >= 0)
                {
                    USERACCOUNTENT user = (USERACCOUNTENT)gridView1.GetFocusedRow();
                    txtCMND.Text = user.IDCARD;
                    txtEmail.Text = user.EMAIL;
                    txtFirstName.Text = user.FIRSTNAME;
                    txtHomePhone.Text = user.HOMEPHONE;
                    txtLastName.Text = user.LASTNAME;
                    txtMiddleName.Text = user.MIDDLENAME;
                    txtMobile.Text = user.MOBILEPHONE;
                    txtUserName.Text = user.USERNAME;
                    dtpDOB.DateTime = user.DOB;
                    if (user.GETISADMIN)
                    {
                        chkIsAdmin.CheckState = CheckState.Checked;
                    }
                    else
                    {
                        chkIsAdmin.CheckState = CheckState.Checked;

                    }
                    glkEmpoyer.EditValue = user.EMPLOYERID;
                    glkGroupUser.EditValue = user.GROUPUSERCODE;
                }
            }
            catch (Exception)
            {

                return;
            }
        }

        private void UserAccount_ucc_Load(object sender, EventArgs e)
        {
            try
            {
                var checkRole = new DETAILGROUPUSERROLEBLL();

                if (!checkRole.CHECKROLE(general.groupUserCode, Role.user_add))
                {
                    btnAdd.Enabled = false;
                }
                if (!checkRole.CHECKROLE(general.groupUserCode, Role.user_edit))
                {
                    btnUpdate.Enabled = false;
                }
                if (!checkRole.CHECKROLE(general.groupUserCode, Role.user_delete))
                {
                    btnDelete.Enabled = false;

                }
                if (!checkRole.CHECKROLE(general.groupUserCode, Role.reset_pass))
                {
                    btnReset.Enabled = false;

                }

                LoadDataUser();
                LoadDataGroupUser();
                LoadDataEmployer();
            }
            catch (Exception)
            {


            }

            
        }

        private void LoadDataEmployer()
        {
             empBLL = new EMPLOYERBLL();
            glkEmpoyer.Properties.DataSource = empBLL.GET_EMPLOYER_ALL();
            glkEmpoyer.Properties.DisplayMember = "FULLNAME";
            glkEmpoyer.Properties.ValueMember = "EMPLOYERID";
            
        }

        private void LoadDataGroupUser()
        {
            groupUserBLL  = new GROUPUSERBLL();
            glkGroupUser.Properties.DataSource = groupUserBLL.GET_GROUPUSER_ALL();
            glkGroupUser.Properties.DisplayMember = "GROUPUSERNAME";
           glkGroupUser.Properties.ValueMember = "GROUPUSERCODE";
            if (!general.isAdministrator)
            {
                for (int i = 0; i < gridView1.DataRowCount; i++)
                {


                    var result = gridView1.GetRowCellValue(i, "USERNAME").ToString();
                    if (result.ToString().ToLower()=="administrator")
                    {
                        gridView1.DeleteRow(i);
                        break;
                    }        
                }
            }
        }

        private void glkEmpoyer_Properties_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            if (glkEmpoyer.Properties.Buttons[1] == e.Button)
            {
                frmEmployer emp = new frmEmployer();
                emp.ShowDialog();
                LoadDataEmployer();
            }
            else if (glkGroupUser.Properties.Buttons[1] == e.Button)
            {
                frmGroupUser groupuser = new frmGroupUser();
                groupuser.ShowDialog();
                LoadDataGroupUser();
            }
            else
                return;
        }

        private void txtPassWord_EditValueChanged(object sender, EventArgs e)
        {

        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            if (txtUserName.Text.Trim()=="")
            {
                return;
            }
            if (MessageBox.Show(
                "Bạn có chắc là muốn đặt lại mật khẩu cho tài khoản này ?",
                "Thông báo",
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Question) == DialogResult.Yes)
            {
                if (userBLL.RESETPASSWORD(txtUserName.Text.Trim(), Encrypt.MD5Encrypt("123456")))
                {
                    MessageBox.Show("Đặt lại mật khẩu thành công mật khẩu mới là : 123456");
                }
            }
            
        }

       
    }
}
